package com.medical.literature.visualization.controller;

import com.medical.literature.common.vo.Result;
import com.medical.literature.visualization.dto.KeywordStatisticsRequest;
import com.medical.literature.visualization.dto.KeywordStatisticsResponse;
import com.medical.literature.visualization.dto.LiteratureTrendRequest;
import com.medical.literature.visualization.dto.LiteratureTrendResponse;
import com.medical.literature.visualization.service.VisualizationService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * 可视化控制器
 */
@Slf4j
@RestController
@RequestMapping("/visualization")
@RequiredArgsConstructor
public class VisualizationController {
    
    private final VisualizationService visualizationService;

    /**
     * 获取关键词统计信息
     */
    @PostMapping("/keyword-statistics")
    public Result<KeywordStatisticsResponse> getKeywordStatistics(
            @RequestHeader("X-User-Id") Long userId,
            @RequestHeader(value = "X-User-Type", required = false) Integer userType,
            @Valid @RequestBody KeywordStatisticsRequest request) {
        
        // 如果是管理员用户（userType == 2），并且没有指定特定用户，则查看所有用户的数据
        if (userType != null && userType == 2 && request.getUserId() == null) {
            // 管理员查看所有用户的数据，不设置userId
            log.info("管理员用户查看所有用户的数据");
        } else {
            // 普通用户只能查看自己的数据
            request.setUserId(userId);
        }
        
        KeywordStatisticsResponse response = visualizationService.getKeywordStatistics(request);
        return Result.success(response);
    }

    /**
     * 获取文献趋势数据
     */
    @PostMapping("/literature-trend")
    public Result<LiteratureTrendResponse> getLiteratureTrend(
            @RequestHeader("X-User-Id") Long userId,
            @RequestHeader(value = "X-User-Type", required = false) Integer userType,
            @Valid @RequestBody LiteratureTrendRequest request) {
        
        // 如果是管理员用户（userType == 2），并且没有指定特定用户，则查看所有用户的数据
        if (userType != null && userType == 2 && request.getUserId() == null) {
            // 管理员查看所有用户的数据，不设置userId
            log.info("管理员用户查看所有用户的数据");
        } else {
            // 普通用户只能查看自己的数据
            request.setUserId(userId);
        }
        
        LiteratureTrendResponse response = visualizationService.getLiteratureTrend(request);
        return Result.success(response);
    }
}